/**
 * File: MarcaProdutoMB.java
 * Data: 11.11.2010
 * Objective: Criar a classe managed bean da entidade Marca Produto.
 *
 * Copyright 2010 S2DZ CORPORATION
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package mbeans;

import controller.MarcaProdutoController;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;
import modelo.MarcaProdutoModelo;
import org.richfaces.component.UIExtendedDataTable;

/**
 * Managed Bean da entidade que representa a Marca do Produto.
 * @author Paulo Ilenga
 */
@ManagedBean
@ViewScoped
public class MarcaProdutoMB implements Serializable
{

    private MarcaProdutoController controller;
    private MarcaProdutoModelo modelo, modeloTemp;
    private List<MarcaProdutoModelo> seleccionados = new ArrayList<MarcaProdutoModelo>();
    private Collection<Object> selection;
    private FacesContext context;

    /** Constructor da classe sem argumentos */
    public MarcaProdutoMB()
    {
        controller = new MarcaProdutoController();
        modelo = new MarcaProdutoModelo();
        modeloTemp = new MarcaProdutoModelo();
    }

//------------------------inicio dos Métodos set e get---------------------------------
    public MarcaProdutoController getController()
    {
        return controller;
    }

    public void setController(MarcaProdutoController controller)
    {
        this.controller = controller;
    }

    public MarcaProdutoModelo getModelo()
    {
        return modelo;
    }

    public void setModelo(MarcaProdutoModelo modelo)
    {
        this.modelo = modelo;
    }

    public MarcaProdutoModelo getModeloTemp()
    {
        return modeloTemp;
    }

    public void setModeloTemp(MarcaProdutoModelo modeloTemp)
    {
        this.modeloTemp = modeloTemp;
    }

    public List<MarcaProdutoModelo> getTodosTable()
    {
        return controller.getTodos(false);
    }

    public List<MarcaProdutoModelo> getTodosCombo()
    {
        return controller.getTodos(true);
    }

    public List<MarcaProdutoModelo> getSeleccionados()
    {
        return seleccionados;
    }

    public void setSeleccionados(List<MarcaProdutoModelo> seleccionados)
    {
        this.seleccionados = seleccionados;
    }

    public Collection<Object> getSelection()
    {
        return selection;
    }

    public void setSelection(Collection<Object> selection)
    {
        this.selection = selection;
    }

    public void selectionListener(AjaxBehaviorEvent event)
    {
        UIExtendedDataTable dataTable = (UIExtendedDataTable) event.getComponent();

        Object originalKey = dataTable.getRowKey();

        seleccionados.clear();

        for (Object selectionKey : selection)
        {
            dataTable.setRowKey(selectionKey);

            if (dataTable.isRowAvailable())
            {
                seleccionados.add((MarcaProdutoModelo) dataTable.getRowData());
            }
        }

        if (modeloTemp.getId() != seleccionados.get(0).getId())
        {
            modeloTemp = seleccionados.get(0);
        }
        dataTable.setRowKey(originalKey);
    }
    //-----------------------fim dos métodos set e get------------------------------

    /**
     * Método salvar da classe
     */
    public void salvar()
    {
        context = FacesContext.getCurrentInstance();

        if (!modelo.getNome().equals(""))
        {
            if (controller.save(modelo))
            {
                modelo = new MarcaProdutoModelo();
                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "", "REGISTO GUARDADO COM SUCESSO!"));
            } else
            {
                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "ERRO N.º SG001: AO GUARDAR O REGISTO! CONSULTE O SUPORTE."));
            }
        } else
        {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "AVISO N.º UG002: DEVE PREENCHER O NOME!"));
        }
    }

    /**
     * Método que actualiza os dados do registo.
     */
    public void actulizar()
    {
        context = FacesContext.getCurrentInstance();

        if (modeloTemp.getId() != 0)
        {
            if (!modeloTemp.getNome().equals(""))
            {
                if (controller.update(modeloTemp))
                {
                    this.modeloTemp.setNome("");
                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "", "Registo Actualizado Com Sucesso!"));
                }
                else
                {
                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "ERRO N.º SG001: AO ACTUALIZAR O REGISTO! CONSULTE O SUPORTE."));
                }
            } else
            {
                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "AVISO N.º UG002: DEVE PREENCHER O NOME DA MARCA!"));
            }
        } else
        {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "AVISO N.º UA002: DEVE SELECCIOAR UM REGISTO!"));
        }
    }

    /**
     * Método que elimina os dados do registo.
     */
    public void eliminar()
    {
        context = FacesContext.getCurrentInstance();

        if (!seleccionados.isEmpty())
        {
            for (MarcaProdutoModelo modeloEliminar : seleccionados)
            {
                if (controller.eliminar(modeloEliminar.getId(), "tbl_marca_produto"))
                {
                } else
                {
                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "ERRO N.º SG001: AO ELIMINAR O(S) REGISTO(S)! CONSULTE O SUPORTE."));
                    break;
                }
            }
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "", seleccionados.size() + " REGISTO(S) ELIMINADO(S) COM SUCESSO!"));
        } else
        {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "ERRO AVISO N.º UE001: DEVE SELECCIONAR PELO MENOS UM REGISTO."));
        }
    }

    /**
     * Método que limpa os atributos da entidade.
     */
    public void limpar()
    {
        modeloTemp.setId(0);
        modeloTemp.setNome("");
    }

    /**
     * Métodos que cria uma nova instância do objecto modelo.
     */
    public void novoModelo()
    {
        modeloTemp = new MarcaProdutoModelo();
    }
}
